from django.db import models
from django.utils import timezone 
from django.contrib.auth.models import User 
from django.db.models.query import QuerySet
from taggit.managers import TaggableManager

class PublishedManager(models.Manager):

 def get_queryset(self) -> QuerySet:
      return super(PublishedManager,
   self).get_queryset().filter(status='published')
from django.urls import reverse 

class Post(models.Model): 
   STATUS_CHOICES = ( 
      ('draft', 'Draft'),
      ('published', 'Published') 
   )
   objects = models.Manager()  
   published = PublishedManager()
   
   tags = TaggableManager() 

   title = models.CharField(max_length=250) 
   body = models.TextField() 
   slug = models.SlugField(max_length=250, unique_for_date='publish') 
   author = models.ForeignKey(User, on_delete=models.CASCADE, 
      related_name='author') 
   publish = models.DateTimeField(default=timezone.now) 
   created = models.DateTimeField(auto_now_add=True) 
   updated = models.DateTimeField(auto_now=True) 
   status = models.CharField(max_length=10, choices=STATUS_CHOICES, 
   default='draft') 
   class Meta: 
      ordering = ('-publish',) 
   def __str__(self): 
      return self.title
   def get_absolute_url(self): 
      return reverse('blog:post_detail', args=[self.publish.year, self.publish.month, 
                     self.publish.day, self.slug]) 
# Create your models here.
class Comment(models.Model): 
 post = models.ForeignKey(Post, 
                            on_delete=models.CASCADE, 
                            related_name='comments') 
 name = models.CharField(max_length=80) 
 email = models.EmailField() 
 body = models.TextField() 
 created = models.DateTimeField(auto_now_add=True) 
 updated = models.DateTimeField(auto_now=True) 
 active = models.BooleanField(default=True) 
 class Meta: 
   ordering = ('created',) 
 
 def __str__(self): 
   return f'Comment by {self.name} on {self.post}'
